package com.idroc.cdfs.node;

/**
 * 节点遍历游标
 * @author zhandl(yuyoo4j@163.com)
 * @companay www.idroc.com
 * @2009-8-8 下午11:47:10
 * @memo 可以对节点中的数据项进行遍历
 */
public interface ICursor {

	/**
	 * 节点中数据项数量
	 * @return -- 数量
	 */
	long count();
	
	/**
	 * 关闭游标
	 * @memo 使用游标后必须关闭
	 */
	void close();
	
	/**
	 * 获取游标当前定位的数据项的key
	 * @return 数据项的key
	 */
	byte[] getKey();
	
	/**
	 * 获取游标当前定位的数据项的数据
	 * @return -- 数据
	 */
	byte[] getValue();
	
	/**
	 * 定位节点的第一个数据项
	 * @return -- true, 游标定位到了第一个数据项; 
	 *         -- false, 游标未能定位到第一个数据项, 游标的当前数据项保存原来的数据项
	 */
	boolean getFirst();
	
	/**
	 * 定位节点的最后一个数据项
	 * @return -- true, 游标定位到了最后一个数据项; 
	 *         -- false, 游标未能定位到最后一个数据项, 游标的当前数据项保存原来的数据项
	 */
	boolean getLast();
	
	/**
	 * 移动游标到下一个数据项
	 * @return -- true, 游标移动到了下一个数据项; 
	 *         -- false, 游标未能移动到下一个数据项, 游标的当前数据项保存原来的数据项
	 */
	boolean getNext();
	
	/**
	 * 移动游标到上一个数据项
	 * @return -- true, 游标移动到了上一个数据项; 
	 *         -- false, 游标未能移动到上一个数据项, 游标的当前数据项保存原来的数据项
	 */
	boolean getPrev();
	
	/**
	 * 查找特定key的数据项
	 * @param key -- 数据项的key
	 * @return -- true, 如果找到此数据项
	 * @memo 如果找到(return true)则会更新当前的数据项
	 */
	boolean find(byte[] key);
	
	/**
	 * 存储以当前数据项的key的数据
	 * @param value -- 数据项的数据
	 * @return -- true, 保存成功
	 */
	boolean store(byte[] value);
	
	/**
	 * 删除当前数据项
	 * @return -- true, 删除成功, 或者不存在此数据项
	 */
	boolean delete(); 
}
